#ifndef FILE_SENDER_MANAGER_H
#define FILE_SENDER_MANAGER_H
#include <QVector>
#include <QTimer>
#include <QIODevice>
#include <QUDPSocket>
#include <QPair>

#include "fileSender.h"
#include "commons.h"
class Server;

//Qesta classe gestisce i ltrasferimento dei files
//ed in particolari tutti gli eventi asincroni
class FileSenderManager : public QObject
{
	Q_OBJECT

	

public:
	// Costruttore i parametri devono essere puntatori validi fino alla ricezione dei segnali
	// di completamento o di errore
	FileSenderManager(bool force, QIODevice *data, QVector<QPair<quint32, quint16>> *clients, quint16 ack_port, QHostAddress addr, quint16 join_port, QString fileName = QString(), Server *parent=0);
	~FileSenderManager();
	void avviaTrasferimento();

private slots:
	void timeoutScaduto();
	void ackRicevuto();
	void terminaTrasferimento();

signals:
	void transferComplete();
	void transferError();

private:

	QTimer tout;
	QUdpSocket ackSocket;
	FileSender *fileSenderObj;
	QVector<QPair<quint32, quint16>> clientsList;
	int nClients, nCompletedClients;
	quint32 *completedClients;
	Server *serverRef;
	
};

#endif